/********************************************************************************
  * @file    SD93F115B_wwdg.c
  * @author   TEST TEAM 												    	
  * @version  v0															    	
  * @date     Septemper 2022												    	
  * @brief
  *
  * Copyright (C) 2022  Hangzhou SDIC Microelectronics Co., Ltd
**********************************************************************************/

/* Includes */
    
#include "SD93F115B_wwdg.h"
#include "SD93F115B_rcc.h"

/*---------------------------------------------------
 * 函数功能：使能窗户看门狗
 * 入口参数：None
 * 出口参数：None
 * 返回值  ：None
 * 编写日期：
 * 作者    ：
 *---------------------------------------------------*/
void WWDG_DeInit(void)
{
	RCC_APBPeriphResetCmd(RCC_APBPeriph_WWDG, ENABLE);
	RCC_APBPeriphResetCmd(RCC_APBPeriph_WWDG, DISABLE);
}

/*--------------------------------------------------
 * 函数功能：初始化窗口看门狗
 * 入口参数：WWDG_InitStruct:pointer to a WWDG_InitStruct structure that
 *           contains the configuration information for the specified WWDG peripheral.
 * 出口参数：None
 * 返回值  ：None
 * 编写日期：
 * 作者    ：
 *--------------------------------------------------*/
void WWDG_Init(WWDG_InitTypeDef* WWDG_InitStruct)            
{
	/* Check the parameters */
	assert_param(IS_WWDG_Prescaler(WWDG_Prescaler));
	assert_param(IS_WWDG_WINDOW_Value(WWDG_WindowValue));
	assert_param(IS_WWDG_Counter(WWDG_Counter));
	
	WWDG_SetPrescaler(WWDG_InitStruct->WWDG_Prescaler);
	WWDG_SetWindowValue(WWDG_InitStruct->WWDG_WindowValue);
	WWDG_SetCounter(WWDG_InitStruct->WWDG_Counter);
}

/*------------------------------------------------
 * 函数功能：设置看门狗时钟分频
 * 入口参数：WWDG_Prescaler: WWDG_Prescaler_1,WWDG_Prescaler_2,WWDG_Prescaler_4,WWDG_Prescaler_8
 * 出口参数：None
 * 返回值  ：None
 * 编写日期：
 * 作者    ：
 *------------------------------------------------*/
void WWDG_SetPrescaler(uint16_t WWDG_Prescaler)
{
	/* Check the parameters */
	assert_param(IS_WWDG_Prescaler(WWDG_Prescaler));
	
	uint16_t tmpreg=0;
	tmpreg=WWDG->CFR & 0x00FF;
	tmpreg|= WWDG_Prescaler; 
	WWDG->CFR=tmpreg;
	
} 

/*---------------------------------------------------
 * 函数功能：设置看门狗窗户值
 * 入口参数：WWDG_WindowValue: 0x3f~0x7f
 * 出口参数：None
 * 返回值  ：None
 * 编写日期：
 * 作者    ：
 *---------------------------------------------------*/
void WWDG_SetWindowValue(uint16_t WWDG_WindowValue)
{
	/* Check the parameters */
	assert_param(IS_WWDG_WINDOW_Value(WWDG_WindowValue));
	
	uint16_t tmpreg = 0;
	tmpreg = WWDG->CFR & 0x0380;

	tmpreg |= WWDG_WindowValue;

	WWDG->CFR = tmpreg;
} 

/*--------------------------------------------------
 * 函数功能：设置看门狗计数值
 * 入口参数：WWDG_Counter: 0x40~0x7f
 * 出口参数：None
 * 返回值  ：None
 * 编写日期：
 * 作者    ：
 *-------------------------------------------------*/
void WWDG_SetCounter(uint8_t WWDG_Counter)
{
	uint8_t tmpreg=0;
	/* Check the parameters */
	assert_param(IS_WWDG_Counter(WWDG_Counter));	
	
	tmpreg=WWDG->CFR & 0x80;
	tmpreg |= WWDG_Counter;
	WWDG->CR=tmpreg;
} 
 
/*-------------------------------------------------
 * 函数功能：使能窗口看门狗
 * 入口参数：None
 * 出口参数：None
 * 返回值  ：None
 * 编写日期：
 * 作者    ：
 *-------------------------------------------------*/
void WWDG_Cmd(void)
{
	
	WWDG->CR |= WWDG_CR_WWDGEN;
	
} 
 
/*-----------------------------
 * 函数功能：看门狗中断使能
 * 入口参数：None
 * 出口参数：None
 * 返回值  ：None
 * 编写日期：
 * 作者    ：
 *------------------------------*/
void WWDG_ITCmd(void)
{
	WWDG->CFR |= WWDG_CFR_EWI;
} 
 

/*-------------------------------
 * 函数功能：读看门狗状态标志位
 * 入口参数：None
 * 出口参数：bitstatus
 * 返回值  ：看门狗状态标志位
 * 编写日期：
 * 作者    ：
 *-------------------------------*/
ITStatus WWDG_GetITStatus(void)
{
	ITStatus bitstatus = RESET;
	if ((WWDG->SR & WWDG_SR_WIF )!= RESET)
	{
		bitstatus = SET;
	}
	else
	{
		bitstatus = RESET;
	}
	return bitstatus;
}
 
/*-----------------------------
 * 函数功能：清零看门狗状态标志位
 * 入口参数：None
 * 出口参数：None
 * 返回值  ：None
 * 编写日期：
 * 作者    ：
 *------------------------------*/
void WWDG_ClearITStatus(void)
{
	WWDG->SR |= WWDG_SR_WIF;
} 


/****************************END OF FILE****************************/
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 